package gui.logado.minhaconta;

import conexao.Http;
import conexao.HttpData;
import conexao.HttpListener;
import gui.utilitarias.filemanager.SelecionaListener;
import gui.utilitarias.filemanager.SelecionarArquivo;
import java.io.DataInputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import javax.microedition.lcdui.*;
import recados.Recados;

public class Foto extends Form implements CommandListener, ItemCommandListener, Runnable, SelecionaListener, HttpListener {

    private final ImageItem visualizar;
    private final Command cmdVoltar;
    private final TextField endereco;
    private final Command cmdProcurar;
    private final Command cmdEnviar;

    public Foto() {
        super("Alterar Foto");

        cmdProcurar = new Command("Procurar", Command.ITEM, 0);
        endereco = new TextField("Arquivo:", null, 100, TextField.URL);
        endereco.addCommand(cmdProcurar);
        endereco.setItemCommandListener(this);
        endereco.setDefaultCommand(cmdProcurar);

        visualizar = new ImageItem(null, null, Item.LAYOUT_CENTER, "Sua Imagem");

        cmdVoltar = new Command("Voltar", Command.BACK, 0);
        cmdEnviar = new Command("Alterar", Command.OK, 1);

        addCommand(cmdVoltar);
        addCommand(cmdEnviar);

        append(visualizar);
        append(endereco);

        setCommandListener(this);
    }

    public void commandAction(Command c, Displayable d) {
        if (c == cmdVoltar) {
            Recados.setCurrent(Recados.getInstance().getAvancado());
        } else if (c == cmdEnviar) {
            if (endereco.size() > 0) {
                new Thread(this).start();
            } else {
                Recados.setCurrent(new Alert("Erro", "Selecione a foto", null, AlertType.ERROR), this);
            }
        }
    }

    public void commandAction(Command c, Item item) {
        SelecionarArquivo filebrowser = new SelecionarArquivo();
        filebrowser.setListener(this);
        filebrowser.switchToFiles(new String[]{"jpg", "png", "gif"});
        Recados.setCurrent(filebrowser);
    }

    public void arquivoSelecionado(String url) {
        String arquivo = "file:///" + url;

        try {
            FileConnection conn = (FileConnection) Connector.open(arquivo);
            DataInputStream in = conn.openDataInputStream();
            Image imagem = Image.createImage(in);
            visualizar.setImage(imagem);
            endereco.setString(arquivo);
            Recados.setCurrent(this);
        } catch (IOException ex) {
            Recados.setCurrent(new Alert("Erro", "Problema ao abrir arquivo", null, AlertType.ERROR), this);
        }
    }

    public void cancela() {
        Recados.setCurrent(this);
    }

    public void run() {
        try {
            Http http = new Http("Enviando Foto");
            HttpData dados = new HttpData();
            http.setHttpData(dados);

            dados.setPagina("/alterafoto.php");
            http.setListener(this);

            dados.put("nome", Recados.getInstance().getLoginConfig().getNome());
            dados.put("senha", Recados.getInstance().getLoginConfig().getSenha());

            FileConnection conn = (FileConnection) Connector.open(endereco.getString());

            String extensao = conn.getName().substring(conn.getName().indexOf('.') + 1);

            String tipo = "";

            if (extensao.equalsIgnoreCase("jpg")) {
                tipo = "image/jpeg";
            } else if (extensao.equalsIgnoreCase("png")) {
                tipo = "image/png";
            } else if (extensao.equalsIgnoreCase("gif")) {
                tipo = "image/gif";
            }

            dados.setArquivo("foto", conn.getName(), tipo, endereco.getString());
            Recados.setCurrent(http);
            http.doPost(false);
        } catch (IOException ex) {
            Recados.setCurrent(new Alert("Erro", "Problema ao enviar arquivo: " + ex.getMessage(), null, AlertType.ERROR), this);
        }
    }

    public void requisicaoConcluida(DataInputStream in) {
        String verifica = Http.readLine(in);

        if (verifica.indexOf("erro") > -1) {
            int num_erros = Integer.parseInt(verifica.substring(verifica.indexOf('-') + 1));
            int baixado = 0;

            StringBuffer erros = new StringBuffer(1);

            while (baixado < num_erros) {
                erros.append(Http.readLine(in)).append("\n");
                baixado++;
            }

            Recados.setCurrent(new Alert("Erro", erros.toString(), null, AlertType.ERROR), this);

            return;
        }
        Recados.setCurrent(new Alert("Sucesso", verifica, null, AlertType.CONFIRMATION), Recados.getInstance().getAvancado());
    }

    public void requisicaoCancelada() {
        Recados.setCurrent(this);
    }

    public void falhaRequisiçao(String mensagem) {
        Recados.setCurrent(new Alert("Erro", mensagem, null, AlertType.ERROR), this);
    }
}
